package com.example.demo.common;

import lombok.Data;
import org.springframework.data.domain.Page;

import java.util.List;

/**
 * 分页响应结果类
 * @author Logan.Li
 */
@Data
public class PageResult<T> {
    
    /**
     * 总记录数
     */
    private long count;
    
    /**
     * 总页数
     */
    private int totalPages;
    
    /**
     * 当前页码
     */
    private int currentPage;
    
    /**
     * 每页大小
     */
    private int pageSize;
    
    /**
     * 下一页链接
     */
    private String next;
    
    /**
     * 上一页链接
     */
    private String previous;
    
    /**
     * 数据列表
     */
    private List<T> results;
    
    /**
     * 从Page对象构建PageResult
     */
    public static <T> PageResult<T> fromPage(Page<T> page) {
        PageResult<T> result = new PageResult<>();
        result.setCount(page.getTotalElements());
        result.setTotalPages(page.getTotalPages());
        result.setCurrentPage(page.getNumber() + 1); // Page从0开始，转换为从1开始
        result.setPageSize(page.getSize());
        result.setResults(page.getContent());
        
        // 设置上一页和下一页链接
        if (page.hasPrevious()) {
            result.setPrevious("/api/books?page=" + page.getNumber() + "&size=" + page.getSize());
        }
        
        if (page.hasNext()) {
            result.setNext("/api/books?page=" + (page.getNumber() + 2) + "&size=" + page.getSize());
        }
        
        return result;
    }
}
